Remove uses of strcpy and strncpy from common and x86 code.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 29 Jan 2007 14:59:42 +0000 (14:59 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 29 Jan 2007 14:59:42 +0000 (14:59 +0000)
Retain safe_strcpy(). It can hide the third argument to strlcpy() in
most cases.

Based on patches from Christoph Egger <Christoph.Egger@amd.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
16 files changed:
xen/acm/acm_core.c
xen/arch/x86/cpu/common.c
xen/arch/x86/cpu/cyrix.c
xen/arch/x86/cpu/intel.c
xen/arch/x86/dmi_scan.c
xen/arch/x86/domain_build.c
xen/arch/x86/hvm/intercept.c
xen/arch/x86/setup.c
xen/common/kexec.c
xen/common/keyhandler.c
xen/common/libelf/libelf-dominfo.c
xen/common/libelf/libelf-private.h
xen/common/perfc.c
xen/common/rangeset.c
xen/drivers/char/console.c
xen/include/xen/string.h

index 5ab04e8b3ccbb2699a5621a0855ba69e3e665b12..dd332b785806f169e305a95c52964f633b1e7b69 100644 (file)
@@ -89,8 +89,11 @@ acm_set_policy_reference(u8 * buf, u32 buf_size)
     if (!acm_bin_pol.policy_reference_name)
         return -ENOMEM;
 
-    strcpy(acm_bin_pol.policy_reference_name, (char *)(buf + sizeof(struct acm_policy_reference_buffer)));
-    printk("%s: Activating policy %s\n", __func__, acm_bin_pol.policy_reference_name);
+    strlcpy(acm_bin_pol.policy_reference_name,
+            (char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+            ntohl(pr->len));
+    printk("%s: Activating policy %s\n", __func__,
+           acm_bin_pol.policy_reference_name);
     return 0;
 }
 
@@ -106,8 +109,9 @@ acm_dump_policy_reference(u8 *buf, u32 buf_size)
 
     memset(buf, 0, ret);
     pr_buf->len = htonl(strlen(acm_bin_pol.policy_reference_name) + 1); /* including stringend '\0' */
-    strcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
-           acm_bin_pol.policy_reference_name);
+    strlcpy((char *)(buf + sizeof(struct acm_policy_reference_buffer)),
+            acm_bin_pol.policy_reference_name,
+            ntohl(pr_buf->len));
     return ret;
 }
 
index ae13c7341b357fd1f0e4a6a5125ad5d6f45968cc..956bd190a19bc0869e4d37796b4e81b5521931d5 100644 (file)
@@ -30,9 +30,9 @@ static void default_init(struct cpuinfo_x86 * c)
        if (c->cpuid_level == -1) {
                /* No cpuid. It must be an ancient CPU */
                if (c->x86 == 4)
-                       strcpy(c->x86_model_id, "486");
+                       safe_strcpy(c->x86_model_id, "486");
                else if (c->x86 == 3)
-                       strcpy(c->x86_model_id, "386");
+                       safe_strcpy(c->x86_model_id, "386");
        }
 }
 
@@ -383,7 +383,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
                char *p;
                p = table_lookup_model(c);
                if ( p )
-                       strcpy(c->x86_model_id, p);
+                       safe_strcpy(c->x86_model_id, p);
                else
                        /* Last resort... */
                        snprintf(c->x86_model_id, sizeof(c->x86_model_id),
index d44f6e890ef87a808f9127083f8bd4cdd63e69fe..754a0755c18a7539b18cb8c170ce553bb415eed1 100644 (file)
@@ -181,7 +181,6 @@ static void __init geode_configure(void)
 static void __init init_cyrix(struct cpuinfo_x86 *c)
 {
        unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0;
-       char *buf = c->x86_model_id;
        const char *p = NULL;
 
        /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
@@ -302,8 +301,8 @@ static void __init init_cyrix(struct cpuinfo_x86 *c)
                dir0_msn = 7;
                break;
        }
-       strcpy(buf, Cx86_model[dir0_msn & 7]);
-       if (p) strcat(buf, p);
+       safe_strcpy(c->x86_model_id, Cx86_model[dir0_msn & 7]);
+       if (p) strcat(c->x86_model_id, p);
        return;
 }
 
@@ -339,7 +338,7 @@ static void cyrix_identify(struct cpuinfo_x86 * c)
        if ( c->x86 == 4 && test_cyrix_52div() ) {
                unsigned char dir0, dir1;
                
-               strcpy(c->x86_vendor_id, "CyrixInstead");
+               safe_strcpy(c->x86_vendor_id, "CyrixInstead");
                c->x86_vendor = X86_VENDOR_CYRIX;
                
                /* Actually enable cpuid on the older cyrix */
index 1aff3d0d4f24cfad0ce748f371ad9e209b58f572..5fcad2403ad204dee881f6664dbde80ba0a7e914 100644 (file)
@@ -152,7 +152,7 @@ static void __devinit init_intel(struct cpuinfo_x86 *c)
        }
 
        if ( p )
-               strcpy(c->x86_model_id, p);
+               safe_strcpy(c->x86_model_id, p);
        
        c->x86_max_cores = num_cpu_cores(c);
 
index 89b65b7a3cdd3f4f8fad9ca265e191870f30efb5..2d49d412fc9d4078255da2123031c7f97562b665 100644 (file)
@@ -159,7 +159,7 @@ static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string)
                return;
        dmi_ident[slot] = alloc_bootmem(strlen(p)+1);
        if(dmi_ident[slot])
-               strcpy(dmi_ident[slot], p);
+               safe_strcpy(dmi_ident[slot], p);
        else
                printk(KERN_ERR "dmi_save_ident: out of memory.\n");
 }
index b32f57861cfd8b98b5b1d2a86f53c40df217ce06..49401987f1964d3cf68eb2d4ba9b9b12dcf64b15 100644 (file)
@@ -871,7 +871,7 @@ int construct_dom0(struct domain *d,
 
     memset(si->cmd_line, 0, sizeof(si->cmd_line));
     if ( cmdline != NULL )
-        strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line));
+        safe_strcpy(si->cmd_line, cmdline);
 
     if ( fill_console_start_info((void *)(si + 1)) )
     {
index e5c1728b7dc6954a2ab0322a86f44ff51023bb5b..8b32dbce82da6b268cc0ccb7e648be471221d6c9 100644 (file)
@@ -173,7 +173,7 @@ int hvm_register_savevm(struct domain *d,
         return -1;
     }
 
-    strlcpy(se->idstr, idstr, HVM_SE_IDSTR_LEN);
+    safe_strcpy(se->idstr, idstr);
 
     se->instance_id = instance_id;
     se->version_id = version_id;
@@ -224,7 +224,7 @@ int hvm_save(struct vcpu *v, hvm_domain_context_t *h)
 
     for(se = v->domain->arch.hvm_domain.first_se; se != NULL; se = se->next) {
         /* ID string */
-        len = strnlen(se->idstr, HVM_SE_IDSTR_LEN);
+        len = strnlen(se->idstr, sizeof(se->idstr));
         hvm_put_8u(h, len);
         hvm_put_buffer(h, se->idstr, len);
 
@@ -262,7 +262,7 @@ static HVMStateEntry *find_se(struct domain *d, const char *idstr, int instance_
     HVMStateEntry *se;
 
     for(se = d->arch.hvm_domain.first_se; se != NULL; se = se->next) {
-        if (!strncmp(se->idstr, idstr, HVM_SE_IDSTR_LEN) &&
+        if (!strncmp(se->idstr, idstr, sizeof(se->idstr)) &&
             instance_id == se->instance_id){
             return se;
         }
index c8daf1c28e9d4f568f98285a191ae0dd1f34413c..189177e3fd47873ebd6a836a781073531611b073 100644 (file)
@@ -111,7 +111,7 @@ char acpi_param[10] = "";
 static void parse_acpi_param(char *s)
 {
     /* Save the parameter so it can be propagated to domain0. */
-    strlcpy(acpi_param, s, sizeof(acpi_param));
+    safe_strcpy(acpi_param, s);
 
     /* Interpret the parameter for use within Xen. */
     if ( !strcmp(s, "off") )
@@ -748,7 +748,7 @@ void __init __start_xen(multiboot_info_t *mbi)
         if ( (cmdline = strchr(cmdline, ' ')) != NULL )
         {
             while ( *cmdline == ' ' ) cmdline++;
-            strcpy(dom0_cmdline, cmdline);
+            safe_strcpy(dom0_cmdline, cmdline);
         }
 
         cmdline = dom0_cmdline;
index 5727cdcaa86e2972a6b74f81eea272fa08d15a1c..04a1468d3a718dbeb7d1d8113fb9db041ce90e36 100644 (file)
@@ -131,7 +131,7 @@ __initcall(register_crashdump_trigger);
 
 static void setup_note(Elf_Note *n, const char *name, int type, int descsz)
 {
-    strcpy(ELFNOTE_NAME(n), name);
+    safe_strcpy(ELFNOTE_NAME(n), name);
     n->namesz = strlen(name);
     n->descsz = descsz;
     n->type = type;
index 5ff45d0d54982a8f9085b552d2d1b26a439179f9..6568407bb277e25302160b2e72461bf66f880137 100644 (file)
@@ -67,8 +67,7 @@ void register_keyhandler(
     ASSERT(key_table[key].u.handler == NULL);
     key_table[key].u.handler = handler;
     key_table[key].flags     = 0;
-    strlcpy(key_table[key].desc, desc, STR_MAX);
-    key_table[key].desc[STR_MAX-1] = '\0';
+    safe_strcpy(key_table[key].desc, desc);
 }
 
 void register_irq_keyhandler(
@@ -77,7 +76,7 @@ void register_irq_keyhandler(
     ASSERT(key_table[key].u.irq_handler == NULL);
     key_table[key].u.irq_handler = handler;
     key_table[key].flags         = KEYHANDLER_IRQ_CALLBACK;
-    strlcpy(key_table[key].desc, desc, STR_MAX);
+    safe_strcpy(key_table[key].desc, desc);
 }
 
 static void show_handlers(unsigned char key)
index c353acde162d368e9881f53f1c3f587c5bdcaf16..9d45b8ae21009077cd03f7b0be5ad871e1fd7cb4 100644 (file)
@@ -128,16 +128,16 @@ int elf_xen_parse_note(struct elf_binary *elf,
     switch (type)
     {
     case XEN_ELFNOTE_LOADER:
-       elf_strlcpy(parms->loader, str, sizeof(parms->loader));
+       safe_strcpy(parms->loader, str);
        break;
     case XEN_ELFNOTE_GUEST_OS:
-       elf_strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
+       safe_strcpy(parms->guest_os, str);
        break;
     case XEN_ELFNOTE_GUEST_VERSION:
-       elf_strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
+       safe_strcpy(parms->guest_ver, str);
        break;
     case XEN_ELFNOTE_XEN_VERSION:
-       elf_strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
+       safe_strcpy(parms->xen_ver, str);
        break;
     case XEN_ELFNOTE_PAE_MODE:
        if (0 == strcmp(str, "yes"))
@@ -224,13 +224,13 @@ int elf_xen_parse_guest_info(struct elf_binary *elf,
 
        /* strings */
        if (0 == strcmp(name, "LOADER"))
-           elf_strlcpy(parms->loader, value, sizeof(parms->loader));
+           safe_strcpy(parms->loader, value);
        if (0 == strcmp(name, "GUEST_OS"))
-           elf_strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
+           safe_strcpy(parms->guest_os, value);
        if (0 == strcmp(name, "GUEST_VER"))
-           elf_strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
+           safe_strcpy(parms->guest_ver, value);
        if (0 == strcmp(name, "XEN_VER"))
-           elf_strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
+           safe_strcpy(parms->xen_ver, value);
        if (0 == strcmp(name, "PAE"))
        {
            if (0 == strcmp(value, "yes[extended-cr3]"))
index 146251fe0021cdd21f40a011b33299b0c1af576a..c404638f66ed1c9b23f8ee0eadba71f3936ec9ef 100644 (file)
@@ -21,8 +21,6 @@
 #define bswap_32(x) swab32(x)
 #define bswap_64(x) swab64(x)
 
-#define elf_strlcpy(d,s,c) strlcpy(d,s,c)
-
 #else /* !__XEN__ */
 
 #include <stdio.h>
         xc_set_error(XC_INVALID_KERNEL, fmt , ## args );  \
        } while (0)
 
-/* SysV unices have no strlcpy/strlcat. */
-static inline size_t elf_strlcpy(char *dest, const char *src, size_t size)
-{
-    strncpy(dest, src, size-1);
-    dest[size-1] = '\0';
-    return strlen(src);
-}
+#define safe_strcpy(d,s)                        \
+do { strncpy((d),(s),sizeof((d))-1);            \
+     (d)[sizeof((d))-1] = '\0';                 \
+} while (0)
 
 #endif
 
index 86fda48e07185d721ffec03f05caecad37bc1e83..bbff5d7b5ca1ecdf3a33ee41b8dedca77a454bab 100644 (file)
@@ -148,8 +148,7 @@ static int perfc_copy_info(XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc,
     {
         for ( i = 0; i < NR_PERFCTRS; i++ )
         {
-            strlcpy(perfc_d[i].name, perfc_info[i].name,
-                    sizeof(perfc_d[i].name));
+            safe_strcpy(perfc_d[i].name, perfc_info[i].name);
 
             switch ( perfc_info[i].type )
             {
index 3594db41e99fcb8a44939fba87aee991e200eeee..79a09f894e57e06e431aed95ec2b5cf98b827226 100644 (file)
@@ -283,7 +283,7 @@ struct rangeset *rangeset_new(
 
     if ( name != NULL )
     {
-        strlcpy(r->name, name, sizeof(r->name));
+        safe_strcpy(r->name, name);
     }
     else
     {
index 457ab393aa30972b22f9dbb62642ac6d79c6dbd4..01eda8a06dd0c3da1be62c53fd07bf6a1f804b78 100644 (file)
@@ -481,7 +481,7 @@ void printk(const char *fmt, ...)
 
 void set_printk_prefix(const char *prefix)
 {
-    strcpy(printk_prefix, prefix);
+    safe_strcpy(printk_prefix, prefix);
 }
 
 void init_console(void)
@@ -771,7 +771,7 @@ void debugtrace_printk(const char *fmt, ...)
 
     ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
 
-    sprintf(buf, "%u ", ++count);
+    snprintf(buf, sizeof(buf), "%u ", ++count);
 
     va_start(args, fmt);
     (void)vsnprintf(buf + strlen(buf), sizeof(buf), fmt, args);
index 347ca8358ab5d9e1f9c098b9649c3bd38ac260d7..f40bcbc3d0084123b6649a39ce1817e2d4c5f9e3 100644 (file)
@@ -82,9 +82,6 @@ extern void * memchr(const void *,int,__kernel_size_t);
 }
 #endif
 
-#define safe_strcpy(d,s)                        \
-do { strncpy((d),(s),sizeof((d)));              \
-     (d)[sizeof((d))-1] = '\0';                 \
-} while (0)
+#define safe_strcpy(d, s) strlcpy(d, s, sizeof(d))
 
 #endif /* _LINUX_STRING_H_ */